package com.cskaoyan.javase.basic._3variable;

/**
 * 变量的概念:
 * 在程序运行过程中，其取值一旦具有发生改变的可能性，那么就是一个变量。
 *
 * 变量也是分种类的,不同种类的变量它的使用是完全不同的
 * 今天我们先学习Java中最常见的变量类型——局部变量
 *
 * 局部变量的概念: 定义在Java代码局部位置的变量就是局部变量
 * 局部位置的概念: 通俗点说,在Java代码中,大括号之间的位置就是局部位置
 *      1.典型的,像main方法的大括号之间,称之为main方法的方法体,就是一种局部位置
 *      2.除了方法体大括号内部,所有的代码块的大括号中间都是局部位置
 *      3.类名后面的大括号,一般称之为"类体",但是注意类体之间不属于局部位置
 *
 *
 * 局部变量有什么特点:
 *      1.局部变量定义在局部位置
 *      2.局部变量在使用时,必须经过两步,先声明,然后再初始化
 *
 * 局部变量的声明和初始化:
 * 声明,声明的意义是告诉Java的编译器该变量的数据类型以及变量名.
 * 语法: 数据类型 变量名
 * 初始化,初始化的意义是明确变量的具体取值,在Java一般使用赋值运算符"="来进行赋值
 *      "="的意义是将"="右边的取值,赋值给左边
 * 一般来说,声明和初始化一行写完就可以.
 *
 * 注意事项:
 *      1.在Java代码中,如果一个局部变量只有声明没有初始化,那么它会参与代码运行吗?那么它有意义吗?
 *      没有意义,所以也不参与代码运行
 *      原理在于,Java的编译器在编译代码时,会自动忽略掉代码中仅声明的局部变量
 *
 *      2.在Java中,需要先声明再初始化才能够使用的变量是局部变量
 *          也只有局部变量有这样的特点
 *          其他变量的特点完全是不同的
 *      3.局部变量被代码块（大括号）限制了作用域，仅在大括号内部生效
 *
 * @since 09:45
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        // 局部位置
        // 声明一个int类型局部变量a
        int a;
        // Variable 'a' might not have been initialized
        // 只有声明没有初始化的局部变量,不能使用
        // System.out.println(a);
        // 初始化变量a
        a = 100;
        System.out.println(a);

        String str = "hello";
        System.out.println(str);

        double b;

        // 局部变量被代码块（大括号）限制了作用域，仅在大括号内部生效
        if (true) {
            // 局部位置
            // Variable 'a' is already defined in the scope
            // a变量已经在作用域内部被定义了,不能再重复定义了
            // int a = 100;
            // String b;
            // 该变量c仅在if的大括号生效,出了这个大括号就不生效了
            int c = 100;
        }

        // 这里可以定义c吗? 完全可以
        int c = 100;
    }
}
